//package com.runa.monitor.platinterface.service;
//
//import com.alibaba.fastjson.JSON;
//import com.runa.monitor.comm.dto.Node;
//import com.runa.monitor.comm.dto.newComm.AsynResult;
//import com.runa.monitor.platinterface.backwork.impl.RccTaskFunction;
//import com.runa.monitor.platinterface.mqtt.MqttUtil;
//import com.runa.monitor.platinterface.backwork.function.TaskFunction;
//import com.runa.monitor.platinterface.netservice.connect.commstatus.CommStatus;
//import com.runa.persistence.CollectionUtil;
//import com.runa.persistence.service.InvokeService;
//import com.runa.persistence.service.LogService;
//import com.runa.rccprotocol.dto.equdata.EquData;
//import com.runa.rccprotocol.dto.guangda.GdConcentratorResponseData;
//import com.runa.rccprotocol.dto.guangda.GdEqu;
//import com.runa.rccprotocol.dto.guangda.GdRequestData;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.util.StringUtils;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
//import static com.runa.monitor.platinterface.mqtt.MqttUtil.topicOfNoneContent;
//
///**
// * 2024/7/12 14:24
// * zhangYB
// */
//@Data
//@Slf4j
//public class GdTaskFunction implements TaskFunction<Object, GdConcentratorResponseData, String> {
//
//    private String netSerial;
//
//    private String equId;
//    private String serial;
//
//    private String taskNo;
//
//    private String holdInfo;
//
//    private String topic;//确定业务类型
//
//    private RccTaskFunction.AllTask taskFunction;
//
//    private GdRequestData requestData;
//
//    private EquData.EquDataType type;
//
//    public GdTaskFunction() {
//    }
//
//    public GdTaskFunction(String netSerial) {
//        this.netSerial = netSerial;
//    }
//
//    @Override
//    public void setStatus(Object o) {
//    }
//
//    @Override
//    public void doApply(CommStatus status, GdConcentratorResponseData responseData) {
//        log.debug("{} {} {} {} {} {}", taskNo, netSerial, serial, status, JSON.toJSONString(responseData), taskFunction);
//        LogService.pendingUpCount(taskNo, netSerial);
//        if (taskNo == null ) {
//            scheduleTask(status, responseData);
//            return;
//        }
//
//        switch(status) {
//            case OK:
//                ok(status, responseData);
//                break;
//            case TimeOut:
//                timeout(status, responseData);
//                break;
//            case OffLine:
//                offline(status, responseData);
//                break;
//            case Error:
//                error(status, responseData);
//                break;
//            default:
//                unknown(status, responseData);
//        }
//    }
//
//    public void scheduleTask(CommStatus status, GdConcentratorResponseData responseData) {
//        if (null == responseData) {
//            log.debug("scheduleTask: {} {} {} ", netSerial, status, JSON.toJSONString(requestData));
//            return;
//        }
//        Integer equIndex = requestData.getEquIndex();
//        String netSerial = requestData.getAddress();
//        String requestMessage = requestData.getMessage();
//        List<String> serials = responseData.getData().stream().map(e -> e.getSerial()).collect(Collectors.toList());
//        log.info("{} 解析光大{}条数据", netSerial, serials.size());
//        if (null == equIndex) {
//            InvokeService.saveGdRead(netSerial, serials, requestMessage, responseData.getMessage());
//        } else {
//            InvokeService.saveGdRead(netSerial, equIndex, serials, requestMessage, responseData.getMessage());
//        }
//
//    }
//
//    private void unknown(CommStatus status, GdConcentratorResponseData responseData) {
//        error(status, responseData);
//    }
//
//    private void error(CommStatus status, GdConcentratorResponseData responseData) {
//        log.debug("error: {} {} {}", taskNo, netSerial, JSON.toJSONString(responseData));
////        if (null != requestData && CollectionUtil.isNotEmpty(requestData.getNodes())) {
////            for (Node node : requestData.getNodes()) {
////                AsynResult result =  AsynResult.builder().code(ResultConstants.CODE_500).msg(status.getStatus()).task(taskNo).holdInfo(holdInfo)
////                        .identity(node.getId()).id(netSerial).build();
////                send(result);
////            }
////        } else {
////            AsynResult result =  AsynResult.builder().code(ResultConstants.CODE_500).msg(status.getStatus()).task(taskNo).holdInfo(holdInfo)
////                    .identity(equId).id(netSerial).build();
////            send(result);
////        }
//
//    }
//
//    private void offline(CommStatus status, GdConcentratorResponseData responseData) {
//        if (null != requestData && CollectionUtil.isNotEmpty(requestData.getNodes())) {
//            for (Node node : requestData.getNodes()) {
//                AsynResult result =  AsynResult.builder().task(taskNo).holdInfo(holdInfo)
//                        .identity(node.getId()).id(netSerial).build();
//                result.offlineSetting();
//                send(result);
//            }
//        } else {
//            AsynResult result =  AsynResult.builder().task(taskNo).holdInfo(holdInfo)
//                    .identity(equId).id(netSerial).build();
//            result.offlineSetting();
//            send(result);
//        }
//    }
//
//    private void timeout(CommStatus status, GdConcentratorResponseData responseData) {
//        if (null != requestData && CollectionUtil.isNotEmpty(requestData.getNodes())) {
//            for (Node node : requestData.getNodes()) {
//                AsynResult result =  AsynResult.builder().task(taskNo).holdInfo(holdInfo)
//                        .identity(node.getId()).id(netSerial).build();
//                result.timeoutSetting();
//                send(result);
//            }
//        } else {
//            AsynResult result =  AsynResult.builder().task(taskNo).holdInfo(holdInfo)
//                    .identity(equId).id(netSerial).build();
//            result.timeoutSetting();
//            send(result);
//        }
//    }
//
//    public void ok(CommStatus status, GdConcentratorResponseData responseData) {
//        if (null == responseData) {
//            log.info("解析光大响应数据, responseData为空");
//            return;
//        }
//        List<Node> nodes = requestData.getNodes();
//        String netSerial = requestData.getAddress();
//        List<GdEqu> gdEquList = responseData.getData();
//        log.info("{} 响应 解析光大{}条数据", netSerial, gdEquList.size());
//        log.debug("gdEquList: {}", JSON.toJSONString(gdEquList));
//        log.debug("nodes: {}", JSON.toJSONString(nodes));
//
//        AsynResult asynResult = new AsynResult();
//        asynResult.setId(netSerial);
//        asynResult.setHoldInfo(holdInfo);
//        asynResult.setTask(taskNo);
//
//        Map<String, Node> nodeMap = nodes.stream().collect(Collectors.toMap(Node::getSerial, Function.identity()));
//        for (GdEqu gdEqu : gdEquList) {
//            Node node = nodeMap.remove(gdEqu.getSerial());
//            if (null == node) {
//                node = nodeMap.remove("0"+gdEqu.getSerial());
//                if (null == node) {
//                    continue;
//                }
//            }
//            asynResult.setIdentity(node.getId());
//            AsynResult result = JSON.parseObject(JSON.toJSONString(asynResult), AsynResult.class);
//            if (gdEqu.isError()) {
//                log.debug("结果报错: {} {}", node.getId(), JSON.toJSONString(gdEqu));
//            } else {
//                gdEqu.setReadTime(requestData.getReadTime());
//                gdEqu.gdHandleByType(type);
//                if (null != type && EquData.EquDataType.TEMPERATURE_PANEL.equals(type)) {
//                    result.setContent(new ArrayList<>(Arrays.asList(gdEqu)));
//                } else {
//                    result.setContent(gdEqu);
//                }
//                send(result);
//            }
//        }
//        for (Node node : nodeMap.values()) {
//            asynResult.setIdentity(node.getId());
//            log.debug("集中器未返回设备信息 {} ", node.getId());
////            AsynResult result = JSON.parseObject(JSON.toJSONString(asynResult), AsynResult.class);
////            result.setCode(ResultConstants.CODE_500);
////            result.setMsg("集中器未返回设备信息");
////            send(result);
//        }
//
//    }
//
//    private void send(AsynResult result) {
//        String top = StringUtils.isEmpty(topic) ? topicOfNoneContent : topic;
//        log.debug("send: {} {}", top, JSON.toJSONString(result));
//        MqttUtil.send(top, result);
//    }
//
//    @Override
//    public String getResult() {
//        return null;
//    }
//
//    @Override
//    public String getSerial() {
//        return serial;
//    }
//
//    @Override
//    public int getPriority() {
//        return 0;
//    }
//
//}
